package factory.method;

import factory.entity.Bike;
import factory.entity.Vehicle;

/**
 * 工厂方法模式
 *
 * 抽象化工厂类(约定接口) 实例化工作转移到具体工厂子类
 * 不需要修改就可以拓展新类
 * 产品类过多, 增加复杂度
 * 
 * @author insight 
 * @since 2021/4/22
 */
public abstract class FactoryMethod {
    /**
     * 抽象工厂类要有创建实例的抽象方法
     *
     * @return Vehicle
     */
    protected abstract Vehicle getVehicle();

    public static void main(String[] args) {
        // 还可以匿名拓展
        FactoryMethod bikeFactory = new FactoryMethod() {
            @Override
            public Vehicle getVehicle() {
                return new Bike();
            }
        };
    }
}